import logging

# 配置日志记录器
logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s')
日志记录器 = logging.getLogger(__name__)

from 程序核心代码.mvvm重构.基础定义.基础图形项.连接线.连接线模型定义 import 连接线模型定义


class 连接线模型管理:
    def __init__(self, 节点模型管理):
        self.节点模型管理 = 节点模型管理
        self.连接线模型集合 = set()
        self.调试模式 = False

        # 设置日志等级
        if self.调试模式:
            日志记录器.setLevel(logging.DEBUG)
            日志记录器.debug(f"{self.__class__.__name__} 调试模式已开启")
        else:
            日志记录器.setLevel(logging.ERROR)  # 只显示警告及以上级别的日志

        日志记录器.info("连接线模型管理已初始化")

    def 创建连接线模型(self, 起始接口, 结束接口, 关系创建节点=None):
        日志记录器.debug("连接线模型管理器：创建连接线模型")
        日志记录器.debug("起始接口：%s", 起始接口.节点模型.获取属性值("节点名称"))
        日志记录器.debug("结束接口：%s", 结束接口.节点模型.获取属性值("节点名称"))
        日志记录器.debug("关系创建节点：%s", 关系创建节点.获取属性值("节点名称") if 关系创建节点 else "None")

        if self.创建关系前置检查(起始接口, 结束接口):
            try:
                连接线模型 = 连接线模型定义(起始接口, 结束接口, 关系创建节点)
            except Exception as e:
                日志记录器.error("创建连接线模型失败: %s", e, exc_info=True)
                return None
            self.连接线模型集合.add(连接线模型)
            self.节点模型管理.节点布局管理器.添加边(起始接口._节点ID, 结束接口._节点ID)
            日志记录器.info("连接线模型创建成功：%s", 连接线模型)
            return 连接线模型
        else:
            日志记录器.warning("创建关系前置检查失败")
            return None

    def 移除连接线模型(self, 连接线模型):
        日志记录器.debug("移除连接线模型：起始接口：%s，结束接口：%s",
                         连接线模型.起始接口.节点模型.获取属性值("节点名称"),
                         连接线模型.结束接口.节点模型.获取属性值("节点名称"))
        self.连接线模型集合.remove(连接线模型)
        self.节点模型管理.节点布局管理器.删除边(连接线模型.起始接口._节点ID, 连接线模型.结束接口._节点ID)
        日志记录器.info("连接线模型移除成功：%s", 连接线模型)

    def 连接线是否存在(self, 起始接口, 结束接口):
        日志记录器.debug("检查连接线是否存在：起始接口：%s，结束接口：%s",
                         起始接口.节点模型.获取属性值("节点名称"),
                         结束接口.节点模型.获取属性值("节点名称"))
        for 连接线模型 in self.连接线模型集合:
            if 连接线模型.起始接口 == 起始接口 and 连接线模型.结束接口 == 结束接口:
                日志记录器.debug("连接线存在：起始接口：%s，结束接口：%s",
                                 起始接口.节点模型.获取属性值("节点名称"),
                                 结束接口.节点模型.获取属性值("节点名称"))
                return True
        日志记录器.debug("连接线不存在：起始接口：%s，结束接口：%s",
                         起始接口.节点模型.获取属性值("节点名称"),
                         结束接口.节点模型.获取属性值("节点名称"))
        return False

    def 关系创建前置检查(self, 起始接口, 结束接口):
        日志记录器.debug("关系创建前置检查：起始接口：%s，结束接口：%s",
                         起始接口.节点模型.获取属性值("节点名称"),
                         结束接口.节点模型.获取属性值("节点名称"))
        if 起始接口.是否可连接(结束接口):
            日志记录器.debug("关系创建前置检查通过")
            return True
        else:
            日志记录器.warning("关系创建前置检查失败")
            return False

    def 创建关系前置检查(self, 起始接口, 结束接口):
        """
        创建一个关系并添加到接口中。

        """
        日志记录器.debug("创建关系前置检查：起始接口：%s，结束接口：%s",
                         起始接口.节点模型.获取属性值("节点名称"),
                         结束接口.节点模型.获取属性值("节点名称"))

        if not 起始接口.流类型 == 结束接口.流类型:
            日志记录器.warning("流类型不匹配")
            return False

        if not 起始接口.方向 == "输出" or not 结束接口.方向 == "输入":
            日志记录器.warning("接口类型不匹配")
            return False

        if 起始接口.节点模型 == 结束接口.节点模型:
            日志记录器.warning("不能连接同一个节点的接口")
            return False

        if not 起始接口.接口是否可以连接():
            起始接口.节点模型.接口数量限制处理(起始接口, 结束接口)
            日志记录器.warning("起始接口数量限制处理")
            return False
        if not 结束接口.接口是否可以连接():
            结束接口.节点模型.接口数量限制处理(起始接口, 结束接口)
            日志记录器.warning("结束接口数量限制处理")
            return False
        # if not 起始接口.节点模型.检查关系是否合法(起始接口, 结束接口):
        #     日志记录器.warning("关系不合法")
        #     return False
        日志记录器.debug("创建关系前置检查通过")
        return True
